package com.lili.core.hibernate.adapter;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

public interface IHibernateTemple {

	/**
	 * 新增一个对象
	 *
	 * @param o
	 * @return 对象id
	 */
	public Serializable saveObject(Object o);

	/**
	 * 新增或者修改一个对象
	 *
	 * @param o
	 */
	public void saveOrUpdateObject(Object o);

	/**
	 * 保存对象（合并session）
	 *
	 * @param o
	 */
	public Object saveMergeObject(Object o);

	/**
	 * 删除一个对象
	 *
	 * @param o
	 */
	public void removeObject(Object o);

	public void saveCollection(Collection entities);

	public void removeObject(Class clazz, Serializable id);

	/**
	 * 删除一批域对象
	 *
	 * @param <T>
	 * @param objectList
	 */
	public void delete(List objectList, int batchSize);

	/**
	 * 修改一批域对象
	 *
	 * @param <T>
	 * @param object
	 * @return
	 */
	public void update(List objects, int batchSize);

	/**
	 *
	 * @param hql
	 *            查询语句
	 * @return
	 */
	public List findListByHql(String hql);

	/**
	 *
	 * @param hql
	 *            查询语句
	 * @return
	 */
	public Object findListFirstObjectByHql(String hql);

	/**
	 *
	 * @param clazz
	 * @param id
	 * @return
	 */
	public <T> T findById(Class<T> clazz, Serializable id);

	/**
	 *
	 * @param countHql
	 *            统计行数查询语句
	 * @return
	 */
	public Integer findCountByHql(final String countHql);

	/**
	 *
	 * @param hql
	 *            查询语句
	 * @param offset
	 *            数据开始下标
	 * @param pageSize
	 *            需要查询的行数
	 * @return
	 */
	public List getListForPage(final String hql, final int offset,
			final int pageSize);
}
